package old.controller;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Named;

import old.business.PessoaBusiness;
import old.business.VeiculoBusiness;
import old.entity.Pessoa;
import old.entity.Transferencia;
import old.entity.Veiculo;

import java.io.Serializable;

@Named
@SessionScoped
public class VeiculoController implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 6388987409480669931L;

	private Veiculo veiculo = new Veiculo();
	
	private Transferencia transferencia = new Transferencia();
	
	private List<Veiculo> veiculoList;
	
	private List<SelectItem> pessoaList;
	
	private String operacao;

	@EJB (mappedName="java:global/almirante/VeiculoBusiness")
	private VeiculoBusiness veiculoBusiness;
	
	@EJB (mappedName="java:global/almirante/PessoaBusiness")
	private PessoaBusiness pessoaBusiness;
	
	
	public String pesquisarVeiculo() {
		try {
			
			veiculoList = veiculoBusiness.listarVeiculo();
			
			return "/pages/veiculo/listar_veiculo";

		} catch (Exception e) {
			//Message.setMessage(new Exception(e));
			return "/pages/veiculo/listar_veiculo";
		}
	}
	
	public String pesquisarVeiculoCriteria() {
		try {
			
			veiculoList = veiculoBusiness.pesquisarVeiculo(veiculo);
			
			return "/pages/veiculo/listar_veiculo";

		} catch (Exception e) {
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível realizar a busca", e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, message);
			return "/pages/veiculo/listar_veiculo";
		}
	}

	public String iniciarCadastrarVeiculo () {
		try {
			veiculo = new Veiculo();
			
			pessoaList = new ArrayList<SelectItem>();

			try {
				for (Pessoa pessoa : pessoaBusiness.listarPessoaSemCarro()) {
					pessoaList.add(new SelectItem(pessoa.getIdPessoa(), pessoa.getNomePessoa()));
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			return "/pages/veiculo/editar_veiculo";
			
		} catch (Exception e) {
			//log.error(e.getMessage(), e);
			//Message.setMessage(new ApplicationException(e));
			return "/pages/inicial";
		}
	}
	
	public String iniciarAlteracaoVeiculo () {
		try {
			veiculo = veiculoBusiness.obterVeiculo(veiculo.getIdVeiculo());
			return "/pages/veiculo/editar_veiculo";
			
		} catch (Exception e) {
			//log.error(e.getMessage(), e);
			//Message.setMessage(new ApplicationException(e));
			return "/pages/inicial";
		}
	}
	
	public String cadastrarVeiculo() {
		
		try {
			veiculoBusiness.cadastrarVeiculo(veiculo);
		} catch (Exception e) {
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
		
		return pesquisarVeiculo();
		
	}
	
	public String alterarVeiculo() {
		
		try {
			veiculoBusiness.alterarVeiculo(veiculo);
		} catch (Exception e) {
			//Message.setMessage(new ApplicationException(e));
		}
		
		return pesquisarVeiculo();
		
	}
	
	public String iniciarTransferenciaVeiculo(){
		try {
			transferencia = new Transferencia();
			
			veiculo = veiculoBusiness.obterVeiculo(veiculo.getIdVeiculo());
						
			pessoaList = new ArrayList<SelectItem>();

			try {
				for (Pessoa pessoa : pessoaBusiness.listarPessoaSemCarro()) {
					pessoaList.add(new SelectItem(pessoa.getIdPessoa(), pessoa.getNomePessoa()));
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			return "/pages/veiculo/realizar_transferencia";
			
		} catch (Exception e) {
			//log.error(e.getMessage(), e);
			//Message.setMessage(new ApplicationException(e));
			return "/pages/inicial";
		}
		
	}
	
	public String realizarTransferencia(){
		try {
			veiculoBusiness.realizarTransferencia(veiculo,transferencia);
		} catch (Exception e) {
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
		
		return pesquisarVeiculo();
		
	}
	

	public Veiculo getVeiculo() {
		return veiculo;
	}

	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}

	public List<Veiculo> getVeiculoList() {
		
		return veiculoList;
	}

	public void setVeiculoList(List<Veiculo> veiculoList) {
		this.veiculoList = veiculoList;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public List<SelectItem> getPessoaList() {
			
		return pessoaList;
	}

	public void setPessoaList(List<SelectItem> pessoaList) {
		this.pessoaList = pessoaList;
	}

	public Transferencia getTransferencia() {
		return transferencia;
	}

	public void setTransferencia(Transferencia transferencia) {
		this.transferencia = transferencia;
	}


	
}
